package com.ics.atable.chat.model.dto;

import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * SQL执行结果DTO
 * 
 * 用于返回SQL执行的结果
 * 
 * @author Chawu
 */
@Data
public class SqlExecuteResult {
    
    /**
     * 执行是否成功
     */
    private Boolean success;
    
    /**
     * 错误信息（执行失败时）
     */
    private String errorMessage;
    
    /**
     * 查询结果数据（SELECT查询时）
     * 每行数据是一个Map，key为列名，value为列值
     */
    private List<Map<String, Object>> data;
    
    /**
     * 影响的行数（INSERT、UPDATE、DELETE时）
     */
    private Integer affectedRows;
    
    /**
     * 总记录数（分页查询时）
     */
    private Long total;
    
    /**
     * 当前页码
     */
    private Integer pageNum;
    
    /**
     * 每页大小
     */
    private Integer pageSize;
    
    /**
     * 执行时间（毫秒）
     */
    private Long executionTime;
    
    /**
     * 成功结果构造方法
     */
    public static SqlExecuteResult success(List<Map<String, Object>> data) {
        SqlExecuteResult result = new SqlExecuteResult();
        result.setSuccess(true);
        result.setData(data);
        return result;
    }
    
    /**
     * 成功结果构造方法（带分页信息）
     */
    public static SqlExecuteResult success(List<Map<String, Object>> data, Long total, Integer pageNum, Integer pageSize) {
        SqlExecuteResult result = new SqlExecuteResult();
        result.setSuccess(true);
        result.setData(data);
        result.setTotal(total);
        result.setPageNum(pageNum);
        result.setPageSize(pageSize);
        return result;
    }
    
    /**
     * 成功结果构造方法（影响行数）
     */
    public static SqlExecuteResult success(Integer affectedRows) {
        SqlExecuteResult result = new SqlExecuteResult();
        result.setSuccess(true);
        result.setAffectedRows(affectedRows);
        return result;
    }
    
    /**
     * 失败结果构造方法
     */
    public static SqlExecuteResult error(String errorMessage) {
        SqlExecuteResult result = new SqlExecuteResult();
        result.setSuccess(false);
        result.setErrorMessage(errorMessage);
        return result;
    }
}
